package com.vr.cloudpicture.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.vr.cloudpicture.model.dto.space.analyze.*;
import com.vr.cloudpicture.model.dto.user.UserLogin;
import com.vr.cloudpicture.model.entity.Space;
import com.vr.cloudpicture.model.vo.analyze.*;

import java.util.List;

/**
 * 空间分析服务
 *
 * @author hzh
 * @date 2025/05/24
 */
public interface ISpaceAnalyzeService extends IService<Space> {
    /**
     * 获取空间使用情况分析
     *
     * @param spaceUsageAnalyzeRequest 空间使用情况分析请求
     * @param loginUser                登录用户
     * @return {@code SpaceUsageAnalyzeResponse }
     */
    SpaceUsageAnalyzeResponse getSpaceUsageAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, UserLogin loginUser);

    /**
     * 获取空间类分类情况分析
     *
     * @param spaceCategoryAnalyzeRequest 空间分类情况分析请求
     * @param loginUser                登录用户
     * @return {@code List<SpaceCategoryAnalyzeResponse> }
     */
    List<SpaceCategoryAnalyzeResponse> getSpaceCategoryAnalyze(SpaceCategoryAnalyzeRequest spaceCategoryAnalyzeRequest, UserLogin loginUser);


    /**
     * 检查空间分析权限
     *
     * @param spaceAnalyzeRequest 空间分析请求
     * @param loginUser                登录用户
     */
    void checkSpaceAnalyzeAuth(SpaceAnalyzeRequest spaceAnalyzeRequest, UserLogin loginUser);

    /**
     * 获取空间标签分析
     *
     * @param spaceTagAnalyzeRequest 空间标签分析请求
     * @param loginUser              登录用户
     * @return {@code List<SpaceTagAnalyzeResponse> }
     */
    List<SpaceTagAnalyzeResponse> getSpaceTagAnalyze(SpaceTagAnalyzeRequest spaceTagAnalyzeRequest, UserLogin loginUser);

    /**
     * 获取空间大小分析
     *
     * @param spaceSizeAnalyzeRequest 空间大小分析请求
     * @param loginUser               登录用户
     * @return {@code List<SpaceSizeAnalyzeResponse> }
     */
    List<SpaceSizeAnalyzeResponse> getSpaceSizeAnalyze(SpaceSizeAnalyzeRequest spaceSizeAnalyzeRequest, UserLogin loginUser);

    /**
     * 用户上传行为分析
     *
     * @param spaceUserAnalyzeRequest 用户上传行为分析请求
     * @param loginUser               登录用户
     * @return {@code List<SpaceUserAnalyzeResponse> }
     */
    List<SpaceUserAnalyzeResponse> getSpaceUserAnalyze(SpaceUserAnalyzeRequest spaceUserAnalyzeRequest, UserLogin loginUser);

    /**
     * 空间排行分析
     *
     * @param SpaceRankAnalyzeRequest 空间用户分析请求
     * @param loginUser               登录用户
     * @return {@code List<Space> }
     */
    List<Space> getSpaceRankAnalyze(SpaceRankAnalyzeRequest spaceRankAnalyzeRequest, UserLogin loginUser);
}
